import axios from "axios";
import { getToken,removeToken } from '@/utils/cookie'
import { useAuthStore } from '@/store/index' // 引入 Pinia store
import router from '@/router'

//创建一个自定义的 Axios 实例，方便对不同的请求进行配置。
const service = axios.create({
    baseURL: import.meta.env.VITE_APP_BASE_API,
    timeout: 10000
})


// 为 Axios 实例添加请求拦截器，在发送请求之前执行一些操作。
//请求拦截器
service.interceptors.request.use(
    config =>{
        const token = getToken()
        if(token){
            config.headers['Authorization'] = token
        }
        return config
    },
    error => {
        return Promise.reject(error)
    }
)


// 为 Axios 实例添加响应拦截器，在接收到响应之后执行一些操作。
// 响应拦截器
service.interceptors.response.use(
    response =>{
        const res = response.data
        if(res.code === 200){
            return res
        } else if(res.code === 404){
            return Promise.reject(new Error('请求路径不存在'))
        } else if(res.code === 401){
            removeToken()
            //这里获取不到this，所以需要使用全局变量
            const mainStore = useAuthStore() //获取 Pinia store实例
            mainStore.setUserInfo(null)
            router.push('/login')
            return Promise.reject(new Error('当前登录已过期，请重新登录'))
        } else {
            // 可以在这里统一处理错误
            return Promise.reject(new Error(res.message || '请求失败'))
        }
    },
    error => {
        return Promise.reject(error)
      }
)
export default service